#ifndef IBVScontrol_H
#define IBVScontrol_H


//!Includes
#include "../algorithms/Target.h"



//!Defines


//!Global Functions


namespace algorithms
{

/**
 * class IBVScontrol
 *
 * Autor:David Bevilaqua
 *
 * DESCRIPTION:
 *
 */

class IBVScontrol
{
public:

	//!Enums



	//!Constructors/Destructors

	/**
	 * Empty Constructor
	 */
	IBVScontrol ( );

	/**
	 * Empty Destructor
	 */

	~IBVScontrol ( );

	//!Public Attributes




	//!Public Accessor Methods
	void SetTargetVecotor (std::vector <algorithms::Target> TargetVector);
	int GetVelWheelLeft();
	int GetVelWheelRight();
	int GetVelLinear();
	int GetVelRot();
	bool GetAchieveTarget();
	void SetAchieveTarget(bool val);
	bool StopRobot();

	//!Public Methods
	void LostTarget (bool lost);
	void Execute ( );


protected:

	//!Protected Attributes



	//!Protected Methods



private:

	//!Private Attributes
	std::vector <algorithms::Target> m_TargetVector;
	int m_iVelWheelLeft;
	int m_iVelWheelRight;
	int m_iVelLinear;
	int m_iVelRot;
	int m_ErroX;
	int m_ErroY;
	int m_ErroTheta;
	bool m_bStopRobot;
	bool m_bLost;
	bool m_bAchieveTarget;
	double m_dbKp;
	double m_dbKa;
	double m_dbKb;
	//!Private Methods
	void initAttributes ( );
	void SetVelLinear(int val);
	void SetVelAngular(int val);
	int SetErroY ();
	int SetErroX ();
	int SetErroTh ();
};

};

#endif
